﻿// ****************************************************************************
// <author>V. Sesharaman, with some slight editing by James W Hurst</author>
// <email>JamesH@DesignForge.com</email>
// <date>2011-9-12</date>
// <project>JhVirtualKeyboard</project>
// <web>http://www.designforge.wordpress.com</web>
// ****************************************************************************
using JhVirtualKeyboard.ViewModels;


namespace JhVirtualKeyboard.KeyAssignmentSets
{
    /// <summary>
    /// The SanskritKeyAssignments subclass of DefaultKeyAssignments overrides those KeyAssignments that need to differ
    /// from those of the English keyboard.
    /// </summary>
    public class SanskritKeyAssignmentSet : KeyAssignmentSet
    {
        public SanskritKeyAssignmentSet()
            : base()
        {
        }

        #region KeyboardLayout
        /// <summary>
        /// Get the WhichKeyboardLayout this KeyAssignmentSet is used for.
        /// </summary>
        public override WhichKeyboardLayout KeyboardLayout
        {
            get { return WhichKeyboardLayout.Sanskrit; }
        }
        #endregion

        #region KeycapFontFamilyName
        /// <summary>
        /// Get the name of the FontFamily that we want to use to display the keycaps of the keyboard in, when using this keyboard.
        /// </summary>
        public override string KeycapFontFamilyName
        {
            get
            {
                return "Arial Unicode MS";
            }
        }
        #endregion

        #region FontSizeForStackedGlyphs
        /// <summary>
        /// Get the FontSize to use for keycaps that have glyphs arranged in two rows, one over the other,
        /// such that a smaller FontSize is needed as opposed to when just a single glyph is to be shown.
        /// </summary>
        public override double FontSizeForStackedGlyphs
        {
            get { return 16.0; }
        }
        #endregion

        #region IsHelpButtonVisible
        /// <summary>
        /// Get whether the help-button, which has the little question-mark icon, is visible.
        /// </summary>
        public override bool IsHelpButtonVisible
        {
            get { return true; }
        }
        #endregion

        #region 0:  VK_Oem3
        /// <summary>
        /// Get the KeyAssignment for VK_Oem3 (0: Grace Accent).
        /// </summary>
        public override  KeyModel VK_Oem3
        {
            get
            {
                if (_VK_Oem3 == null)
                {
                    _VK_Oem3 = new KeyModelWithTwoGlyphs("VK_Oem3", 0x0060, 0x007E, "Grace Accent", "Tilde", false);
                    
                }
                return _VK_Oem3;
            }
        }
       
        #endregion

        #region 1:  VK_1
        public override  KeyModel VK_1
        {
            get
            {
                if (_VK_1 == null)
                {
                    _VK_1 = new KeyModelWithTwoGlyphs("VK_1", 0x0967, 0x0021, "digit ONE", "Exclamation Mark", false);
                }
                return _VK_1;
            }
        }
    
        #endregion

        #region 2:  VK_2
        public override  KeyModel VK_2
        {
            get
            {
                if (_VK_2 == null)
                {
                    _VK_2 = new KeyModelWithTwoGlyphs("VK_2", 0x0968, 0x0040, "digit TWO", "At sign", false);
                }
                return _VK_2;
            }
        }
       
        #endregion

        #region 3:  VK_3
        public override KeyModel VK_3
        {
            get
            {
                if (_VK_3 == null)
                {
                    _VK_3 = new KeyModelWithTwoGlyphs("VK_3", 0x0969, 0x0023, "digit THREE", "Number sign", false);
                }
                return _VK_3;
            }
        }
        
        #endregion

        #region 4:  VK_4
        public override KeyModel VK_4
        {
            get
            {
                if (_VK_4 == null)
                {
                    _VK_4 = new KeyModelWithTwoGlyphs("VK_4", 0x096A, 0x0024, "digit FOUR", "Dollar sign", false);
                }
                return _VK_4;
            }
        }
        
        #endregion

        #region 5:  VK_5
        public override KeyModel VK_5
        {
            get
            {
                if (_VK_5 == null)
                {
                    _VK_5 = new KeyModelWithTwoGlyphs("VK_5", 0x096B, 0x0025, "digit FIVE", "Percent sign", false);
                }
                return _VK_5;
            }
        }
        
        #endregion

        #region 6:  VK_6
        public override KeyModel VK_6
        {
            get
            {
                if (_VK_6 == null)
                {
                    _VK_6 = new KeyModelWithTwoGlyphs("VK_6", 0x096C, 0x005E, "digit SIX", "Circumflex accent", false);
                }
                return _VK_6;
            }
        }
        
        #endregion

        #region 7:  VK_7
        public override KeyModel VK_7
        {
            get
            {
                if (_VK_7 == null)
                {
                    _VK_7 = new KeyModelWithTwoGlyphs("VK_7", 0x096D, 0x0026, "digit SEVEN", "Ampersand", false);
                }
                return _VK_7;
            }
        }
        
        #endregion

        #region 8:  VK_8
        public override KeyModel VK_8
        {
            get
            {
                if (_VK_8 == null)
                {
                    _VK_8 = new KeyModelWithTwoGlyphs("VK_8", 0x096E, 0x002A, "digit EIGHT", "Asterisk", false);
                }
                return _VK_8;
            }
        }
        
        #endregion

        #region 9:  VK_9
        public override KeyModel VK_9
        {
            get
            {
                if (_VK_9 == null)
                {
                    _VK_9 = new KeyModelWithTwoGlyphs("VK_9", 0x096F, 0x0028, "digit NINE", "Left Parenthesis", false);
                }
                return _VK_9;
            }
        }
        
        #endregion

        #region 10: VK_0
        public override KeyModel VK_0
        {
            get
            {
                if (_VK_0 == null)
                {
                    _VK_0 = new KeyModelWithTwoGlyphs("VK_0", 0x0966, 0x0029, "digit ZERO", "Right Parenthesis", false);
                }
                return _VK_0;
            }
        }
        
        #endregion

        #region 11: VK_OemMinus
        /// <summary>
        /// 11  Hyphen
        /// </summary>
        public override KeyModel VK_OemMinus
        {
            get
            {
                if (_VK_OemMinus == null)
                {
                    _VK_OemMinus = new KeyModelWithTwoGlyphs("VK_OemMinus", 0x002D, 0x005F, "Hyphen,Minus", "Underscore", false);
                }
                return _VK_OemMinus;
            }
        }
        
        #endregion

        #region 12: VK_OemPlus
        public override KeyModel VK_OemPlus
        {
            get
            {
                if (_VK_OemPlus == null)
                {
                    _VK_OemPlus = new KeyModelWithTwoGlyphs("VK_OemPlus", 0x03D, 0x002B, "Equals sign", "Plus sign", false);
                }
                return _VK_OemPlus;
            }
        }
        
        #endregion

        #region 13:  VK_Q
        public override KeyModel VK_Q
        {
            get
            {
                if (_VK_Q == null)
                {
                    //TODO: What da?!
                    _VK_Q = new KeyModelWithTwoGlyphs("VK_Q", 0x0905, 0x094D, "Letter a", "Basic letter", false);  //letter a and no vowel
                }
                return _VK_Q;
            }
        }
       
        #endregion

        #region 14: VK_W
        public override KeyModel VK_W
        {
            get
            {
                if (_VK_W == null)
                {
                    _VK_W = new KeyModelWithTwoGlyphs("VK_W", 0x0906, 0x093E, "Letter A", "Vowel A", false); //letter A and first vowel
                }
                return _VK_W;
            }
        }
        
        #endregion

        #region 15: VK_E
        /// <summary>
        /// 15
        /// </summary>
        public override KeyModel VK_E
        {
            get
            {
                if (_VK_E == null)
                {
                    _VK_E = new KeyModelWithTwoGlyphs("VK_E", 0x0907, 0x093F, "Letter e", "Vowel e", false);  // letter e
                }
                return _VK_E;
            }
        }
       
        #endregion

        #region 16: VK_R
        /// <summary>
        /// 16
        /// </summary>
        public override KeyModel VK_R
        {
            get
            {
                if (_VK_R == null)
                {
                    _VK_R = new KeyModelWithTwoGlyphs("VK_R", 0x0908, 0x0940, "Letter E", "Vowel E", false);  //letter E
                }
                return _VK_R;
            }
        }
       
        #endregion

        #region 17: VK_T
        /// <summary>
        /// 17
        /// </summary>
        public override KeyModel VK_T
        {
            get
            {
                if (_VK_T == null)
                {
                    _VK_T = new KeyModelWithTwoGlyphs("VK_T", 0x0909, 0x0941, "Letter u", "Vowel u", false);  //letter u
                }
                return _VK_T;
            }
        }
       
        #endregion

        #region 18: VK_Y
        /// <summary>
        /// 18
        /// </summary>
        public override KeyModel VK_Y
        {
            get
            {
                if (_VK_Y == null)
                {
                    _VK_Y = new KeyModelWithTwoGlyphs("VK_Y", 0x090A, 0x0942, "Letter U", "Vowel U", false);  //letter U
                }
                return _VK_Y;
            }
        }
        
        #endregion

        #region 19:  VK_U
        /// <summary>
        /// 19
        /// </summary>
        public override KeyModel VK_U
        {
            get
            {
                if (_VK_U == null)
                {
                    _VK_U = new KeyModelWithTwoGlyphs("VK_U", 0x090B, 0x0943, "Letter RRi", "Vowel RRi", false);  //letter RRi
                }
                return _VK_U;
            }
        }
        
        #endregion

        #region 20: VK_I
        public override KeyModel VK_I
        {
            get
            {
                if (_VK_I == null)
                {
                    _VK_I = new KeyModelWithTwoGlyphs("VK_I", 0x0960, 0x0944, "Letter RRI", "Vowel RRI", false); //letter RRI
                }
                return _VK_I;
            }
        }
       
        #endregion

        #region 21: VK_O
        /// <summary>
        /// 21
        /// </summary>
        public override KeyModel VK_O
        {
            get
            {
                if (_VK_O == null)
                {
                    _VK_O = new KeyModelWithTwoGlyphs("VK_O", 0x090F, 0x0947, "Letter e", "Vowel e", false);  //letter e
                }
                return _VK_O;
            }
        }
        
        #endregion

        #region 22: VK_P
        /// <summary>
        /// 22
        /// </summary>
        public override KeyModel VK_P
        {
            get
            {
                if (_VK_P == null)
                {
                    _VK_P = new KeyModelWithTwoGlyphs("VK_P", 0x0910, 0x0948, "Letter ai", "Vowel ai", false);  //letter ai, addition vowel ai
                }
                return _VK_P;
            }
        }
       
        #endregion

        #region 23: VK_OemOpenBrackets
        /// <summary>
        /// 23  Left brackets
        /// </summary>
        public override KeyModel VK_OemOpenBrackets
        {
            get
            {
                if (_VK_OemOpenBrackets == null)
                {
                    _VK_OemOpenBrackets = new KeyModelWithTwoGlyphs("VK_OemOpenBrackets", 0x0913, 0x094B, "Vowel O", "Addition Vowel O", false); //letter 0
                }
                return _VK_OemOpenBrackets;
            }
        }
        
        #endregion

        #region 24: VK_Oem6
        /// <summary>
        /// 24  Right brackets
        /// </summary>
        public override KeyModel VK_Oem6
        {
            get
            {
                if (_VK_Oem6 == null)
                {
                    _VK_Oem6 = new KeyModelWithTwoGlyphs("VK_Oem6", 0x0914, 0x094C, "Vowel au", "Addition vowel au", false);
                }
                return _VK_Oem6;
            }
        }
        
        #endregion

        #region 25: VK_Oem5
        /// <summary>
        /// 25
        /// </summary>
        public override KeyModel VK_Oem5
        {
            get
            {
                if (_VK_Oem5 == null)
                {
                    _VK_Oem5 = new KeyModelWithTwoGlyphs("VK_Oem5", 0x0964, 0x0965, "Single Danda", "Double Danda", true);
                }
                return _VK_Oem5;
            }
        }
        
        #endregion

        #region 26: VK_A
        /// <summary>
        /// 26
        /// </summary>
        public override KeyModel VK_A
        {
            get
            {
                if (_VK_A == null)
                {
                    _VK_A = new KeyModelWithTwoGlyphs("VK_A", 0x0915, 0x0916, "Letter ka", "Letter kha", false);  //letter ka, kha
                }
                return _VK_A;
            }
        }
       
        #endregion

        #region 27: VK_S
        /// <summary>
        /// 27
        /// </summary>
        public override KeyModel VK_S
        {
            get
            {
                if (_VK_S == null)
                {
                    _VK_S = new KeyModelWithTwoGlyphs("VK_S", 0x0917, 0x0918, "Letter ga", "Letter gha", false); //letter ga, gha
                }
                return _VK_S;
            }
        }
        
        #endregion

        #region 28: VK_D
        /// <summary>
        /// 28
        /// </summary>
        public override KeyModel VK_D
        {
            get
            {
                if (_VK_D == null)
                {
                    _VK_D = new KeyModelWithTwoGlyphs("VK_D", 0x0919, 0x093D, "Letter gya", "Letter conjunction a", false); //GYa, .a
                }
                return _VK_D;
            }
        }
        
        #endregion

        #region 29: VK_F
        /// <summary>
        /// 29
        /// </summary>
        public override KeyModel VK_F
        {
            get
            {
                if (_VK_F == null)
                {
                    _VK_F = new KeyModelWithTwoGlyphs("VK_F", 0x091A, 0x091B, "Letter ca", "Letter cha", false); //ca, cha
                }
                return _VK_F;
            }
        }
        
        #endregion

        #region 30: VK_G
        /// <summary>
        /// 30
        /// </summary>
        public override KeyModel VK_G
        {
            get
            {
                if (_VK_G == null)
                {
                    _VK_G = new KeyModelWithTwoGlyphs("VK_G", 0x091C, 0x091D, "Letter ja", "Letter jha", false); //ja jha
                }
                return _VK_G;
            }
        }
       
        #endregion

        #region 31: VK_H
        /// <summary>
        /// 31
        /// </summary>
        public override KeyModel VK_H
        {
            get
            {
                if (_VK_H == null)
                {
                    _VK_H = new KeyModelWithTwoGlyphs("VK_H", 0x091E, 0x0902, "Letter nya", "Letter M", false);  //nya, M
                }
                return _VK_H;
            }
        }
       
        #endregion

        #region 32: VK_J
        /// <summary>
        /// 32
        /// </summary>
        public override KeyModel VK_J
        {
            get
            {
                if (_VK_J == null)
                {
                    _VK_J = new KeyModelWithTwoGlyphs("VK_J", 0x091F, 0x0920, "Letter Ta", "Letter Tha", false);  //Ta, Tha
                }
                return _VK_J;
            }
        }
        
        #endregion

        #region 33: VK_K
        /// <summary>
        /// 33
        /// </summary>
        public override KeyModel VK_K
        {
            get
            {
                if (_VK_K == null)
                {
                    _VK_K = new KeyModelWithTwoGlyphs("VK_K", 0x0921, 0x0922, "Letter Da", "Letter Dha", false);  //Da, Dha
                }
                return _VK_K;
            }
        }
       
        #endregion

        #region 34: VK_L
        /// <summary>
        /// 34
        /// </summary>
        public override KeyModel VK_L
        {
            get
            {
                if (_VK_L == null)
                {
                    _VK_L = new KeyModelWithTwoGlyphs("VK_L", 0x0923, 0x0901, "Letter Na", "Candrabindhu", false);  //letter Na, candrabindhu
                }
                return _VK_L;
            }
        }
        
        #endregion

        #region 35: VK_Oem1
        /// <summary>
        /// 35
        /// </summary>
        public override KeyModel VK_Oem1
        {
            get
            {
                if (_VK_Oem1 == null)
                {
                    _VK_Oem1 = new KeyModelWithTwoGlyphs("VK_Oem1", 0x0903, 0x200C, "Visarga", "Zero Width Non-joiner", false);
                }
                return _VK_Oem1;
            }
        }
       
        #endregion

        #region 36: VK_Oem7
        /// <summary>
        /// 36  Apostrophe/Quotation mark
        /// </summary>
        public override KeyModel VK_Oem7
        {
            get
            {
                if (_VK_Oem7 == null)
                {
                    _VK_Oem7 = new KeyModelWithTwoGlyphs("VK_Oem7", 0x0027, 0x0022, "Apostrophe", "Quotation mark", false);
                }
                return _VK_Oem7;
            }
        }
        
        #endregion

        #region 37: VK_Z
        /// <summary>
        /// 37
        /// </summary>
        public override KeyModel VK_Z
        {
            get
            {
                if (_VK_Z == null)
                {
                    _VK_Z = new KeyModelWithTwoGlyphs("VK_Z", 0x0924, 0x0925, "Letter ta", "Letter tha", false);  //letter ta, tha
                }
                return _VK_Z;
            }
        }
        
        #endregion

        #region 38: VK_X
        /// <summary>
        /// 38
        /// </summary>
        public override KeyModel VK_X
        {
            get
            {
                if (_VK_X == null)
                {
                    _VK_X = new KeyModelWithTwoGlyphs("VK_X", 0x0926, 0x0927, "Letter da", "Letter dha", false);  //letter da, dha
                }
                return _VK_X;
            }
        }
        
        #endregion

        #region 39: VK_C
        /// <summary>
        /// 39
        /// </summary>
        public override KeyModel VK_C
        {
            get
            {
                if (_VK_C == null)
                {
                    _VK_C = new KeyModelWithTwoGlyphs("VK_C", 0x0928, 0x200C, "Letter na", "Zero Width Non-joiner", false);  //na
                }
                return _VK_C;
            }
        }
        
        #endregion

        #region 40: VK_V
        /// <summary>
        /// 40
        /// </summary>
        public override KeyModel VK_V
        {
            get
            {
                if (_VK_V == null)
                {
                    _VK_V = new KeyModelWithTwoGlyphs("VK_V", 0x092A, 0x092B, "Letter pa", "Letter pha", false);  //letter pa, pha
                }
                return _VK_V;
            }
        }
        
        #endregion

        #region 41: VK_B
        /// <summary>
        /// 41
        /// </summary>
        public override KeyModel VK_B
        {
            get
            {
                if (_VK_B == null)
                {
                    _VK_B = new KeyModelWithTwoGlyphs("VK_B", 0x092C, 0x092D, "Letter ba", "Letter bha", false);  //letter ba, bha
                }
                return _VK_B;
            }
        }
        
        #endregion

        #region 42: VK_N
        /// <summary>
        /// 42
        /// </summary>
        public override KeyModel VK_N
        {
            get
            {
                if (_VK_N == null)
                {
                    _VK_N = new KeyModelWithTwoGlyphs("VK_N", 0x092E, 0x092F, "Letter ma", "Letter ya", false);  //ma, ya
                }
                return _VK_N;
            }
        }
       
        #endregion

        #region 43: VK_M
        /// <summary>
        /// 43
        /// </summary>
        public override KeyModel VK_M
        {
            get
            {
                if (_VK_M == null)
                {
                    _VK_M = new KeyModelWithTwoGlyphs("VK_M", 0x0930, 0x0932, "Letter ra", "Letter la", false);  //ra, la
                }
                return _VK_M;
            }
        }
        
        #endregion

        #region 44: VK_OemComma
        /// <summary>
        /// 44  Commas / Less-than sign
        /// </summary>
        public override KeyModel VK_OemComma
        {
            get
            {
                if (_VK_OemComma == null)
                {
                    _VK_OemComma = new KeyModelWithTwoGlyphs("VK_OemComma", 0x0935, 0x0936, "va", "sha", false);
                }
                return _VK_OemComma;
            }
        }
        
        #endregion

        #region 45: VK_OemPeriod
        /// <summary>
        /// 45  Period / Greater-than sign
        /// </summary>
        public override KeyModel VK_OemPeriod
        {
            get
            {
                if (_VK_OemPeriod == null)
                {
                    _VK_OemPeriod = new KeyModelWithTwoGlyphs("VK_OemPeriod", 0x0937, 0x0938, "Sha", "sa", false);
                }
                return _VK_OemPeriod;
            }
        }
        
        #endregion

        #region 46: VK_OemQuestion
        /// <summary>
        /// 46  Solidus
        /// </summary>
        public override KeyModel VK_OemQuestion
        {
            get
            {
                if (_VK_OemQuestion == null)
                {
                    _VK_OemQuestion = new KeyModel("VK_OemQuestion", 0x0939, "ha", false);
                }
                return _VK_OemQuestion;
            }
        }
        
        #endregion
    }
}
